package com.Drools.CIPS.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

/**
 * 工具类
 */
public class XmlMapUtil {
    public static void main(String[] args) {
//        System.out.println(ActiveOrHistoricCurrency("CNY1"));
//        Map<String,Object> m = new HashMap<>();
//        System.out.println(m.put("5","6"));
//        System.out.println(m.put("5","2"));

        Object[] o = new Object[5];
        Object o1 = new Object();
        if(o1 instanceof Object[]){
            System.out.println(22);
        }else {
            System.out.println(33);
        }
    }

    /**
     * 以 . 分割的深入获取层叠的 Map
     * @param map
     * @param s
     * @return
     */
    public static Object getValue(Object map,String s){

        for (String s1:s.split("\\.")){
            if(map == null){
                return null;
            }
            map = ((Map) map).get(s1);
        }
        return map;
    }

    /**
     * X00498异常码的校验
     * @param map
     * @param s
     * @param s1
     * @param s2
     * @return
     */
    public static Boolean X00498(Object map,String s,String s1,String s2){
        Object value = XmlMapUtil.getValue(map, s);
        if(value == null) {
            return false;
        }
        if(value instanceof Map){
            Map m = (Map) value;
            return m.get(s1)==null && m.get(s2)==null;
        }else {
            return false;
        }
    }
    /**
     * 以 . 分割的深入获取层叠的 Map
     * @param map
     * @param s
     * @return
     */
    public static int getValueLen(Object map,String s){

        for (String s1:s.split("\\.")){
            if(map == null){
                return 0;
            }
            map = ((Map) map).get(s1);
        }
        if(map instanceof Map){
            return 1;
        }else if(map instanceof List){
            return ((List)map).size();
        }else if(map instanceof String){
            return 1;
        }else if(map instanceof String[]){
            return ((String[])map).length;
        }else if(map instanceof Object[]){
            return ((Object[])map).length;
        }
        return -1;
    }

    /**
     * 返回此值是否在列表中
     * @param s 此值
     * @param enums 列表
     * @return
     */
    public static Boolean exist(Object s,String enums){
        if(s==null){
            return null;
        }
        for (String s1:enums.split(",")){
            if(s1.equals(s)){
                return true;
            }
        }
        return false;
    }

    /**
     * 返回此值是否在列表中
     * @param s 此值
     * @param key key
     * @param enums 列表
     * @return
     */
    public static Boolean exist(Object s,String key,String enums){
        if(s==null){
            return false;
        }
        for (Map<String,Object> m:(List<Map<String,Object>>)s){
            for (String s1:enums.split(",")){
                if(s1.equals(m.get(key))){
                    return true;
                }
            }

        }
        return false;
    }


    /**
     * 获取活动货币
     * @param key
     * @return
     */
    private static String ActiveCurrency(String key) {
        Properties properties = new Properties();
        //Hashtable的子类 常用来处理配置文件   key-value都是String
        try(FileReader fis = new FileReader("src/main/resources/ISO4217.properties");) {

            properties.load(fis);//加载对应的文件
           return properties.getProperty(key);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 历史货币
     * @param key
     * @return
     */
    private static String HistoricCurrency(String key) {
        Properties properties = new Properties();
        //Hashtable的子类 常用来处理配置文件   key-value都是String
        try(FileReader fis = new FileReader("src/main/resources/hisISO4217.properties");) {

            properties.load(fis);//加载对应的文件
           return properties.getProperty(key);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 活动或历史货币
     * @param key
     * @return
     */
    private static String ActiveOrHistoricCurrency(String key) {
        String s = ActiveCurrency(key);
        if(s == null){
            s = HistoricCurrency(key);
        }
        return s;
    }

}
